#ifndef __DRV_KEY_H__
#define __DRV_KEY_H__


#include "Type_def.h"
#include "app_config.h"
#include "drv_jiffes.h"

#define NO_KEY (0xFF)   // 无效按键值

typedef enum {
    KEY_TYPE_IO,
    KEY_TYPE_AD,
    KEY_TYPE_MAX
}key_type_t;

typedef enum {
    KEYCODE_TYPE_NONE=0,
    KEYCODE_TYPE_CLICK,
    KEYCODE_TYPE_DCLICK,
    KEYCODE_TYPE_LONG_DOWN,
    KEYCODE_TYPE_LONG_HOLD,
    KEYCODE_TYPE_LONG_UP,
    KEYCODE_TYPE_MAX
};

struct key_interface_t {
    key_type_t key_type;
    void (*key_init)(void);
    uint8_t (*key_get_value)(void);
};

typedef struct {
    key_type_t key_type;
    uint8_t key_num;
}key_value_t;

typedef struct {
    uint8_t key_type;   // 按键类型：短按，双击，长按按下，长按保持，长按抬起, 无按键
    uint8_t key_code;
}key_code_t;

void drv_key_init(void);

void drv_key_scan(void);

key_code_t drv_key_value_get(void);

#endif
